#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindowClass; };
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindowClass *ui;

public slots:
    /**
     * @brief 初始化列表
    */
    void on_action_Init_triggered();

    /**
     * @brief 清空列表
    */
    void on_action_Clear_triggered();

    /**
     * @brief 插入项
    */
    void on_action_Insert_triggered();

    /**
     * @brief 添加项
    */
    void on_action_Append_triggered();

    /**
     * @brief 删除项
    */
    void on_action_Delete_triggered();

    /**
     * @brief 全选行为
    */
    void on_action_SelectAll_triggered();

    /**
     * @brief 空选行为
    */
    void on_action_SelectNone_triggered();

    /**
     * @brief 反选行为
    */
    void on_action_SelectInvert_triggered();
    
    /**
     * @brief 前选择变化的槽函数
     * @param current 当前
     * @param previous 之前
    */
    void on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);

    /**
     * @brief 允许排序点击
     * @param checked 
    */
    void on_checkBox_Sorting_clicked(bool checked);

    /**
     * @brief 点击升序
    */
    void on_toolButton_Ascending_clicked();

    /**
     * @brief 点击降序
    */
    void on_toolButton_Descending_clicked();

    /**
     * @brief 点击清空文本
    */
    void on_toolButton_ClearText_clicked();

    /**
     * @brief 点击添加空行
    */
    void on_toolButton_AddLine_clicked();

    /**
     * @brief 需要菜单，就是鼠标右键点击
     * @param pos 相对位置
     * @note 对应信号继承于QWidget
     * @note 需要context menu policy中开启设置custom才能生效
    */
    void on_listWidget_customContextMenuRequested(const QPoint& pos);
};
